package proxy.JDK_proxy.proxy;

import proxy.JDK_proxy.dao.UserDao;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author Veng Su 1344114844@qq.com
 * @date 2018/8/13 10:53
 */
// 思路：先把需要代理增强的东西传进来，接着增强之后再把新的返回出去
public class JDKProxy {
    //新建方法返回增强类
    public static UserDao getUserDaoProxy(final UserDao userDao){
        //1.获取类加载器
        ClassLoader userDaoClassLoader=userDao.getClass().getClassLoader();
        //2. 获取接口
        Class<?>[] interfaces=userDao.getClass().getInterfaces();
        //3.创建代理类
        UserDao userDaoProxy= (UserDao) Proxy.newProxyInstance(userDaoClassLoader, interfaces, new InvocationHandler() {
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //开始写增强内容
                if (method.getName().equals("say")){
                    System.out.println("这是增强内容");
                }
                return method.invoke(userDao,args);
            }
        });
        return userDaoProxy;
    }
}
